package com.syedu.day04;

import java.util.Arrays;

/**
 * description：Java参数传递
 *
 * 当调用方法时,我们在方法中传入参数,此时就涉及到了方法参数传递问题,会产生两种不同的情况:
 * 1.值传递: 基本类型(以及一些特殊常用对象类型,String,Date...)采用的是值传递的方式,即把基本类型的值拷贝一份发送给方法参数,进行处理,原值不变
 * 2.引用传递: 对象类型(不包括特殊常用对象类型,String,Date...)采用的是引用传递方式,即把对象类型的内存地址拷贝给方法的参数,进行处理,所以数据会发生改变
 *
 * 为什么这么设计?
 * 基本类型值不会太大,所以,传递时,拷贝一份完整的备份去操作,操作过程不会影响到原数据
 * 对象类型占用的系统资源就可能很大,如果也采用拷贝方式,则太浪费系统资源了,所以,拷贝引用,只保留唯一一份对象
 *
 * 方法调用过程,就是把实参传递(两种方式)给方法形参进行处理的过程.
 *
 * 总结:
 * 基本类型值传递,对象类型引用传递
 *
 * @author Administrator
 * @date 2022/3/10 13:45
 */
public class ParamDemo {
    public static void main(String[] args) {
        //基本类型
        /*int num = 10;//实参
        add(num);
        System.out.println(num);*/

        //对象类型,但是当基本类型处理
        /*String str = "ABC";
        add(str);
        System.out.println(str);*/

        //对象类型
        int[] arr = {1, 2, 3};
        add(arr);
        System.out.println(Arrays.toString(arr));//2,3,4
    }

    //方法参数列表也叫形参
    public static int add(int num) {
        return ++num;
    }

    public static String add(String str) {
        return str + str;
    }

    public static void add(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] += 1;
        }
    }
}